package day1;

//测试函数式接口
public class TestFunction {
    public static void main(String[] args) {
        //lambda表达式:是jdk1.8的特性,用于描述函数式接口
        //语法：()->{}
        //():表示抽象方法的参数
        //->:就是一个连接符
        //{}:表示抽象方法需要做方法实现部分
        //利用匿名内部类写的接口
        two t = new two() {
            @Override
            public void a(int a, int b) {

            }
        };
        //利用lambda表达式来实现接口
        two t2 = (a, b) -> {
            System.out.println("hello" + a + " " + b);
        };
        t2.a(100, 200);

        //lambda 表达式 如果方法带返回值，而且只有一行代码
        //正好是方法的返回值 {} return 都可以省略
        three t3 = (c, d) -> {
            String num = c + d;
            int n = Integer.parseInt(num);
            return n;
        };

        three t4 = (c, d) -> Integer.parseInt(c + d);
    }
}

//普通接口：有1个以上的抽象方法
interface One {
    public void one();

    public void two();

    public void three(int a, String b);
}

//函数式接口：里面有且只有一个抽象方法
//同时还可以通过@FunctionInterface标注函数式接口
@FunctionalInterface
interface two {
    public void a(int a, int b);

    public default void b() {
    }
}

interface three {
    public int a(int a, String b);
}